package common

import (
	"gorm.io/gorm"
)

// 默认页数
const PAGE_DEFAULT = 1

// 默认 limit
const LIMIT_DEFAULT = 20

type PageData struct {
	Page  int   `json:"page" form:"page"`
	Limit int   `json:"limit" form:"limit"`
	Total int64 `json:"total"`
}

func NewPageData() *PageData {
	return &PageData{
		Page:  PAGE_DEFAULT,
		Limit: LIMIT_DEFAULT,
		Total: 0,
	}
}

func Paginate(pageData *PageData) func(db *gorm.DB) *gorm.DB {
	return func(db *gorm.DB) *gorm.DB {
		if pageData.Page <= 0 {
			pageData.Page = PAGE_DEFAULT
		}
		switch {
		case pageData.Limit > 100:
			pageData.Limit = 100
		case pageData.Limit <= 0:
			pageData.Limit = LIMIT_DEFAULT
		}
		offset := (pageData.Page - 1) * pageData.Limit
		return db.Offset(offset).Limit(pageData.Limit)
	}
}
